home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / C Internet Config / IC Application Source ƒ / C Source ƒ / IC Font Whats.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-01  |  6.6 KB  |  296 lines  |  [TEXT/SPM ]

  1. /*
  2.     IC Font Whats.c
  3.     
  4. */
  5.  
  6. #include <Script.h>
  7.  
  8. #include "IC Types.h"
  9. #include "IC API.h"
  10.  
  11. #include "IC Dialogs.h"
  12. #include "IC Window Globals.h"
  13. #include "IC Font Whats.h"
  14. #include "IC Windows.h"
  15. #include "IC Document.h"
  16. #include "IC Subs.h"
  17. #include "IC Misc Subs.h"
  18. #include "IC Movable Modal.h"
  19.  
  20. void SetSizeOutlines(MenuHandle sizemenu,short font_num){
  21.     Str255 tmpstr;
  22.     short i;
  23.     long the_size;
  24.     
  25.     for (i=1;i<=CountMItems(sizemenu);i++){
  26.         GetMenuItemText(sizemenu,i,tmpstr);
  27.         StringToNum(tmpstr,&the_size);
  28.         if (RealFont(font_num,the_size))
  29.             SetItemStyle(sizemenu,i,outline);
  30.         else
  31.             SetItemStyle(sizemenu,i,0);
  32.     }
  33. }
  34.  
  35. Boolean FindMenuItem(MenuHandle mh,StringPtr item,short* index){
  36.     short i;
  37.     Str255 test_name;
  38.     Boolean ret=false;
  39.     
  40.     for (i=1;i<=CountMItems(mh);i++){
  41.         GetMenuItemText(mh,i,test_name);
  42.         if (!IUEqualString(test_name,item)){
  43.             *index=i;
  44.             ret=true;
  45.         }
  46.     }
  47.     return ret;
  48. }
  49.  
  50. long ValidateSize(long size){
  51.     if ((size>0)&&(size<32767))
  52.         return size;
  53.     return GetDefFontSize();
  54. }
  55.  
  56. long GetSizeMenuValue(DialogPtr dlg,short item){
  57.     Str255 tmpstr;
  58.     long tmpint;
  59.     MenuHandle sizemenu;
  60.     
  61.     sizemenu=GetPopupMHandle(dlg,item);
  62.     GetMenuItemText(sizemenu,GetDCtlValue(dlg,item),tmpstr);
  63.     StringToNum(tmpstr,&tmpint);
  64.     return ValidateSize(tmpint);
  65. }
  66.  
  67. void GetCurrentSetting(DialogPtr dlg,short item,ICFontRecord* font_setting,short* font_num){
  68.     font_setting->face=0;// normal face
  69.     GetMenuItemText(GetPopupMHandle(dlg,item),GetDCtlValue(dlg,item),font_setting->font);
  70.     GetFNum(font_setting->font,font_num);
  71.     font_setting->size=GetSizeMenuValue(dlg,item+1);
  72. }
  73.  
  74. pascal void DisplayFontProc(DialogPtr dlg,short item){
  75.     ICFontRecord font_setting;
  76.     SavedWindowInfo saved;
  77.     short font;
  78.     Rect r;
  79.     Str255 s,name;
  80.     
  81.     SetPort(dlg);
  82.     GetCurrentSetting(dlg,item-2,&font_setting,&font);
  83.     EnterWindow(dlg,font,font_setting.size,0,&saved);
  84.     GetDItemRect(dlg,item,&r);
  85.     PenPat(&qd.gray);
  86.     FrameRect(&r);
  87.     PenPat(&qd.black);
  88.     GetFontName(font,name);
  89.     if ((!IUEqualString(name,"\pChicago"))&&((font_setting.size!=12)||(item==9)))
  90.         GetIndString(s,128,16);
  91.     else
  92.         GetIndString(s,128,14);
  93.     
  94.     InsetRect(&r,3,3);
  95.     TETextBox(&(s[1]),s[0],&r,teJustLeft);
  96.     ExitWindow(&saved);
  97. }
  98.  
  99. OSErr WhatOpenFont(WindowType wt,short item){
  100.     WindowPtr dlg;
  101.     MenuHandle fontmenu;
  102.     MenuHandle sizemenu;
  103.     ICFontRecord font_setting;
  104.     long attr;
  105.     short i;
  106.     long count;
  107.     short font_num;
  108.     Str255 numstr;
  109.     ICInstance inst;
  110.     StringPtr keyp;
  111.     OSErr err;
  112.     
  113.     dlg=WindowInfo[wt].window;
  114.     fontmenu=GetPopupMHandle(dlg,item);
  115.     count=sizeof(ICFontRecord);
  116.     
  117.     inst=GetInstance();
  118.     keyp=WindowInfo[wt].items[item]->key;
  119.     
  120.     err=ICMapErr(ICGetPref(inst,keyp,&attr,(Ptr)&font_setting,&count));
  121.     if ((err!=noErr)||(count!=sizeof(ICFontRecord))){
  122.         font_num=GetAppFont();
  123.         GetFontName(font_num,font_setting.font);
  124.         font_setting.face=0;//normal
  125.         font_setting.size=GetDefFontSize();
  126.     } else
  127.         GetFNum(font_setting.font,&font_num);
  128.     
  129.     ProcessAttributes(wt,item,attr);
  130.     
  131.     if (font_num==0){
  132.         font_num=GetAppFont();
  133.         GetFontName(font_num,font_setting.font);
  134.     }
  135.     
  136.     if (FindMenuItem(fontmenu,font_setting.font,&i))
  137.         SetDCtlValue(dlg,item,i);
  138.     
  139.     // The size menu is the next item in the WindowInfo thing
  140.     sizemenu=GetPopupMHandle(dlg,item+1);
  141.     NumToString(font_setting.size,numstr);
  142.     if (FindMenuItem(sizemenu,numstr,&i))
  143.         SetDCtlValue(dlg,item+1,i);
  144.     
  145.     WindowInfo[wt].items[item+1]->spare_data=(Ptr)((long)font_setting.size);
  146.     SetSizeOutlines(sizemenu,font_num);
  147.     SetDCtlEnable(dlg,item,!IsLocked(wt,item));
  148.     SetDCtlEnable(dlg,item+1,!IsLocked(wt,item));
  149.     SetDItemHandle(dlg,item+2,(Handle)gDisplayFontProc);
  150.     
  151.     return noErr;
  152. }
  153.  
  154. OSErr WhatClickFont(WindowType wt,short item,EventRecord* er){
  155.     DialogPtr dlg=WindowInfo[wt].window;
  156.     ICFontRecord font_setting;
  157.     short font_num;
  158.     
  159.     GetCurrentSetting(dlg,item,&font_setting,&font_num);
  160.     SetSizeOutlines(GetPopupMHandle(dlg,item+1),font_num);
  161.     DisplayFontProc(dlg,item+2);
  162.     return noErr;
  163. }
  164.  
  165. pascal Boolean MyModalFilter(DialogPtr dlg,EventRecord* er,short* item){
  166. #define bs 0x08
  167.     char ch;
  168.     Boolean ret=false;
  169.     
  170.     if (CancelModalFilter(dlg,er,item))
  171.         ret=true;
  172.     else if ((er->what==keyDown)||(er->what==autoKey)){
  173.         if ((er->modifiers&cmdKey)==0){
  174.             ch=(char)er->modifiers&0x00ff;
  175.             if ((DirtyKey(ch))&&(!((ch==bs)||((ch>='0')&&(ch<='9'))))){
  176.                 SysBeep(1);
  177.                 er->what=nullEvent;
  178.             }
  179.         }
  180.     }
  181.     
  182.     return ret;
  183. }
  184.  
  185. Boolean GetOtherSize(long* size){
  186.     DialogPtr dlg;
  187.     short item;
  188.     Str255 s;
  189.     Ptr saved_state;
  190.     
  191.     dlg=GetNewDialog(500,(Ptr)0,(WindowPtr)-1);
  192.     
  193.     NumToString(*size,s);
  194.     
  195.     SetItemText(dlg,4,s);
  196.     
  197.     SelectDialogItemText(dlg,4,0,255);
  198.     
  199.     SetUpDefaultOutline(dlg,1,3);
  200.     
  201.     ShowWindow(dlg);
  202.     
  203.     DisableMenuBar(&saved_state,-1);
  204.     
  205.     InitCursor();
  206.     
  207.     do {
  208.         MovableModalDialog(gMyModalFilter,&item);
  209.     } while ((item!=1)&&(item!=2));
  210.     
  211.     if (item==1){
  212.         GetItemText(dlg,4,s);
  213.         StringToNum(s,size);
  214.         *size=ValidateSize(*size);
  215.     }
  216.     
  217.     ReEnableMenuBar(&saved_state);
  218.     DisposeDialog(dlg);
  219.     
  220.     return (item==1);
  221. }
  222.  
  223. OSErr WhatClickFontSize(WindowType wt,short item,EventRecord* er){
  224.     DialogPtr dlg=WindowInfo[wt].window;
  225.     ControlHandle control=GetDControlHandle(dlg,item);
  226.     MenuHandle sizemenu=GetPopupMHandle(dlg,item);
  227.     long n;
  228.     Str255 tmpstr;
  229.     short i;
  230.     Boolean dummy;
  231.     
  232.     if (GetControlValue(control)==CountMItems(sizemenu)){
  233.         n=(long)WindowInfo[wt].items[item]->spare_data;
  234.         dummy=GetOtherSize(&n);
  235.     } else
  236.         n=GetSizeMenuValue(dlg,item);
  237.     
  238.     if (!(((*sizemenu)->enableFlags)&1<<2)){
  239.         // has initial strange number
  240.         DeleteMenuItem(sizemenu,1);
  241.         DeleteMenuItem(sizemenu,1);
  242.     }
  243.     
  244.     WindowInfo[wt].items[item]->spare_data=(Ptr)n;
  245.     
  246.     NumToString(n,tmpstr);
  247.     if (!(FindMenuItem(sizemenu,tmpstr,&i))){
  248.         InsertMenuItem(sizemenu,"\p(-;fred",0);
  249.         SetMenuItemText(sizemenu,1,tmpstr);
  250.         i=1;
  251.     }
  252.     SetControlMaximum(control,CountMItems(sizemenu));
  253.     SetControlValue(control,i);
  254.     DisplayFontProc(WindowInfo[wt].window,item+1);
  255.     return noErr;
  256. }
  257.  
  258. OSErr WhatFlushFont(WindowType wt,short item){
  259.     DialogPtr dlg=WindowInfo[wt].window;
  260.     OSErr err=noErr;
  261.     ICFontRecord font_setting;
  262.     ICFontRecord old_font_setting;
  263.     long attr,count,size;
  264.     short font;
  265.     ICInstance inst;
  266.     StringPtr key;
  267.     
  268.     GetCurrentSetting(dlg,item,&font_setting,&font);
  269.     
  270.     // get old values
  271.     count=sizeof(ICFontRecord);
  272.     inst=GetInstance();
  273.     key=WindowInfo[wt].items[item]->key;
  274.     
  275.     err=ICMapErr(ICGetPref(inst,key,&attr,(Ptr)&old_font_setting,&count));
  276.     if ((err!=noErr)||(count!=sizeof(ICFontRecord))){
  277.         err=noErr;// clear the error
  278.         old_font_setting.font[0]=0;
  279.     }
  280.     
  281.     // write back if changed
  282.     
  283.     if ((old_font_setting.size!=font_setting.size)||(old_font_setting.face!=font_setting.face)||
  284.             (IUEqualString(old_font_setting.font,font_setting.font))){
  285.         if (!IsLocked(wt,item)){
  286.             count=sizeof(ICFontRecord);
  287.             err=ICMapErr(ICSetPref(inst,key,ICattr_no_change,(Ptr)&font_setting,count));
  288.             
  289.             if (err==noErr)
  290.                 DirtyDocument();
  291.         }
  292.     }
  293.     return err;
  294. }
  295.  
  296.